package com.lh.common.utils;


import com.lh.common.exception.RRException;
import org.apache.commons.lang.StringUtils;

import java.util.Collection;


/**
* @ClassName: AssertUtil
* @Description: 判断是否需要终止(这里用一句话描述这个类的作用)
* @author TangCai
* @date 2017年11月4日 上午9:03:22
* 注意：本内容仅限于智慧树内部传阅，禁止外泄以及用于其他的商业目
*/

public class AssertUtil {

	/**
	 * 等值断言
	 *
	 * @param expected
	 * @param actual
	 * @param errorCode
	 * @param message
	 * @throws RRException
	 */
	public static void assertEquals(Object expected, Object actual, int errorCode, String message) throws RRException {
		if (expected != actual && (expected == null || !expected.equals(actual))) {
			throw new RRException(errorCode,message);
		}
	}

	/**
	 * NotTrue断言
	 *
	 * @param value
	 * @param errorCode
	 * @param message
	 * @throws RRException
	 */
	public static void assertNotTrue(Boolean value, int errorCode, String message) throws RRException{
		if (Boolean.TRUE.equals(value)) {
			throw new RRException(errorCode,message);
		}
	}

	/**
	 * NotFalse断言
	 *
	 * @param value
	 * @param errorCode
	 * @param message
	 * @throws RRException
	 */
	public static void assertNotFalse(Boolean value, int errorCode, String message) throws RRException {
		if (Boolean.FALSE.equals(value)) {
			throw new RRException(errorCode,message);
		}
	}

	/**
	 * 非等值断言
	 *
	 * @param expected
	 * @param actual
	 * @param errorCode
	 * @param message
	 * @throws RRException
	 */
	public static void assertNotEquals(Object expected, Object actual, int errorCode, String message) throws RRException {
		if (expected == actual || (expected != null && expected.equals(actual)) || (actual != null && actual.equals(expected))) {
			throw new RRException(errorCode,message);
		}
	}

	/**
	 * 非空断言
	 *
	 * @param value
	 * @param errorCode
	 * @param message
	 * @throws RRException
	 */
	public static void assertNotNull(Object value, int errorCode, String message) throws RRException {
		if (value == null) {
			throw new RRException(errorCode,message);
		}
	}

	/**
	 * 字符串不为空断言
	 *
	 * @param value
	 * @param errorCode
	 * @param message
	 * @throws RRException
	 */
	public static void assertNotEmpty(String value, int errorCode, String message) throws RRException {
		if (StringUtils.isBlank(value)) {
			throw new RRException(errorCode,message);
		}
	}

	/**
	 * 包含断言
	 *
	 * @param collections
	 * @param value
	 * @param errorCode
	 * @param message
	 * @throws RRException
	 */
	public static void assertContain(Collection<?> collections, Object value, int errorCode, String message) throws RRException {
		boolean exists = false;
		for (Object obj : collections) {
			if (obj == value || obj.equals(value)) {
				exists = true;
				break;
			}
		}
		if (!exists) {
			throw new RRException(errorCode,message);
		}
	}

	/**
	 * 不包含断言
	 *
	 * @param collections
	 * @param value
	 * @param errorCode
	 * @param message
	 * @throws RRException
	 */
	public static void assertNotContain(Collection<?> collections, Object value, int errorCode, String message) throws RRException {
		boolean exists = false;
		for (Object obj : collections) {
			if (obj == value || obj.equals(value)) {
				exists = true;
				break;
			}
		}
		if (exists) {
			throw new RRException(errorCode,message);
		}
	}

	/**
	 * 对象为空断言
	 *
	 * @param value
	 * @param errorCode
	 * @param message
	 * @throws RRException
	 */
	public static void assertObjectEmpty(Object value, int errorCode, String message) throws RRException {
		if (value != null) {
			throw new RRException(errorCode,message);
		}
	}
}

